Programmable logic devices (PLDS) are a well-known type of digital integrated circuit that may be programmed by a user (e.g., a circuit designer) to perform specified logic functions. PLDs are becoming ever more popular, largely because they are less expensive in relatively small quantities and require less time to implement than semi-custom and custom integrated circuits.
FIG. 1 is a block diagram of one type of PLD, a field-programmable gate array (FPGA) 100. FPGA 100 includes an array of configurable logic blocks (CLBs) 110 that are programmably interconnected to each other and to programmable input/output blocks (IOBs) 120. The interconnections are provided by a complex interconnect matrix represented as horizontal and vertical interconnect lines 130 and 140. This collection of configurable elements and interconnect may be customized by loading configuration data into internal configuration memory cells (not shown) that define how the CLBs, interconnect lines, and IOBs are configured. The configuration data may be read from memory (e.g., an external PROM) or written into FPGA 100 from an external device. The collective program states of the individual memory cells then determine the function of FPGA 100.
CLBs 110 and IOBs 120 additionally include user-accessible memory elements (not shown), the contents of which can be modified as FPGA 100 operates as a logic circuit. These user-accessible memory elements, or "user logic," include block RAM, latches, and flip-flops. The data stored in user logic is alternatively referred to as "user data" or "state data."
The power of FPGA 100 is that its logical function can be changed at will. Such changes are accomplished by loading the configuration memory cells and resetting (or presetting) the user logic. A sequencer (not shown) controls the configuration process and is designed to prevent interconnect contention during configuration.
Modern FPGAs are complex integrated circuits. As integration levels and system complexity increases, the distribution of the system clock becomes more critical, and consequently more difficult. Clock distribution must take into account distribution topography across the circuit, propagation delays in routing the clock signal to all elements on the circuit, desired set-up and hold times, and variation in system design parameters.
Some conventional programmable logic devices address some of the problems of clock distribution by including a delay-locked loop (DLL) on chip. DLLs employ a controlled delay element to null clock distribution delays within the FPGA by comparing the phase of a reference clock signal with that of a feedback signal. The phase difference between the two signals is used to bring the signals into a fixed phase relation. DLLs typically output a "lock" signal once the signals are in a fixed phase relation. The lock signal is necessary to prevent timing errors that might occur in the absence of a stable clock.
Lucent Technologies, Inc., manufactures FPGAs, under the trademark Orca.RTM., that include programmable clock managers (PCMs) capable of functioning as DLLS. A lock signal from the PCM indicates a stable clock in the FPGA. Unfortunately, the lock signal can pulse low before the output clock stabilizes, thereby falsely indicating a stable clock. Lucent thus suggests that the user integrate the lock signal over a time period suitable to the subject application. In other words, this conventional DLL configuration places the onus on the user to ensure that the output of the DLL is stable before relying upon the programmable logic device.